/*
 * Classe que irá controlar a Tela2(Busca de filmes).
 */
package Controller;

import java.sql.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import Model.Filme;
import java.util.Vector;
import javax.swing.ImageIcon;
import View.Tela3;
import View.Tela4;
import View.Tela7;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author mil
 */
public class ControlaTelas {

    //Conexão com banco de dados.
    String url = "jdbc:mysql://localhost/boxmovie";
    String user = "root", senha = "admin";
    //String user = "root", senha = "vertrigo";
    //String url = "jdbc:mysql://midz.com.br/midz_senai";
    //String user = "midz_senai", senha = "senai";
    //Vector do tipo filme chamado acervo, onde será colocado todos os filmes.
    Vector<Filme> acervo = new Vector<Filme>();
    int posicao = 0;
    //Modelo para formatar a data que é retornada do banco de dados.
    SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");

    //Comando para fechar a Tela
    public void FechaTelas(JFrame Tela) {

        Tela.setVisible(false);

    }

    //Comando para listar os filmes mais locados.
    public void MaisLocados(JLabel TituloBusca, JLabel NomeFilme0, JLabel NomeFilme1, JLabel NomeFilme2, JLabel NomeFilme3, JLabel NomeFilme4, JLabel NomeFilme5, JLabel NomeFilme6, JLabel CapaFilme0, JLabel CapaFilme1, JLabel CapaFilme2, JLabel CapaFilme3, JLabel CapaFilme4, JLabel CapaFilme5, JLabel CapaFilme6) {

        // isto é pra voltar no começo da listagem
        posicao = 0;
        //antes de adicionar os filmes no acervo removemos todos filmes no acervo
        acervo.removeAllElements();

        TituloBusca.setIcon(new ImageIcon(getClass().getResource("/Imagens/label_mais_locados.jpg")));

        Connection conn = null;

        String consulta = "SELECT midia.id_filme, filmes.nome_filme, filmes.id_categoria_filme, filmes.data_lanc_filme , filmes.genero_filme, filmes.sinopse_filme, filmes.trailer_filme, filmes.capa_filme, midia.id_midia FROM midia, filmes WHERE midia.disponivel = 1 AND filmes.id_filme = midia.id_filme GROUP BY midia.id_filme ORDER BY filmes.qtd_locacao";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, senha);
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(consulta);

            while (rs.next()) {
                int id_midia = rs.getInt("id_midia");
                int idcategoria = rs.getInt("id_categoria_filme");
                String nome = rs.getString("nome_filme");
                String generofilme = rs.getString("genero_filme");
                String sinopsefilme = rs.getString("sinopse_filme");
                String trailer = rs.getString("trailer_filme");
                Date datalanc = rs.getDate("data_lanc_filme");
                String capafilme = rs.getString("capa_filme");
                //formatando para o modelo declarado em "f" e é armazenado na string lancamento
                String lancamento = f.format(datalanc);
                //adiciona um novo filme no acervo
                acervo.add(new Filme(id_midia, idcategoria, nome, generofilme, sinopsefilme, trailer, lancamento, capafilme));
            }

        } catch (Exception e) {
            System.out.println("Dado Classe não encontrada");
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
            }
        }

        Listagem(false, acervo, NomeFilme0, NomeFilme1, NomeFilme2, NomeFilme3, NomeFilme4, NomeFilme5, NomeFilme6, CapaFilme0, CapaFilme1, CapaFilme2, CapaFilme3, CapaFilme4, CapaFilme5, CapaFilme6);

    }

    //Comando para listar os filmes em ordem alfabética
    public void OrdemAlfabetica(JLabel TituloBusca, JLabel NomeFilme0, JLabel NomeFilme1, JLabel NomeFilme2, JLabel NomeFilme3, JLabel NomeFilme4, JLabel NomeFilme5, JLabel NomeFilme6, JLabel CapaFilme0, JLabel CapaFilme1, JLabel CapaFilme2, JLabel CapaFilme3, JLabel CapaFilme4, JLabel CapaFilme5, JLabel CapaFilme6) {

        // o que é isso???   
        posicao = 0;
        // isto é pra voltar no começo da listagem, lembra que qdo clica nas setinhas
        //aumenta a posição? ai qdo clica na consulta, ele volta pra 0,
        // isto é necessário, pq senao a consulta dos outros filmes, ja vai começar pelo 1, 2, 3...


        TituloBusca.setIcon(new ImageIcon(getClass().getResource("/Imagens/label_filmes.jpg")));
         //antes de adicionar os filmes no acervo removemos todos filmes no acervo
        acervo.removeAllElements();
        Connection conn = null;
        String consulta = "SELECT filmes.nome_filme, filmes.id_categoria_filme, filmes.genero_filme, filmes.sinopse_filme, filmes.trailer_filme, filmes.data_lanc_filme, filmes.capa_filme, midia.id_midia, midia.id_filme FROM midia, filmes WHERE midia.disponivel = 1 AND filmes.id_filme = midia.id_filme GROUP BY midia.id_filme ORDER BY filmes.nome_filme ASC";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, senha);
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(consulta);

            while (rs.next()) {
                int id_midia = rs.getInt("id_midia");
                int idcategoria = rs.getInt("id_categoria_filme");
                String nome = rs.getString("nome_filme");
                String generofilme = rs.getString("genero_filme");
                String sinopsefilme = rs.getString("sinopse_filme");
                String trailer = rs.getString("trailer_filme");
                Date datalanc = rs.getDate("data_lanc_filme");
                String capafilme = rs.getString("capa_filme");
                //formatando para o modelo declarado em "f" e é armazenado na string lancamento
                String lancamento = f.format(datalanc);
                //adiciona um novo filme no acervo
                acervo.add(new Filme(id_midia, idcategoria, nome, generofilme, sinopsefilme, trailer, lancamento, capafilme));
            }

        } catch (Exception e) {
            System.out.println("Dado Classe não encontrada");
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
            }
        }
        Listagem(false, acervo, NomeFilme0, NomeFilme1, NomeFilme2, NomeFilme3, NomeFilme4, NomeFilme5, NomeFilme6, CapaFilme0, CapaFilme1, CapaFilme2, CapaFilme3, CapaFilme4, CapaFilme5, CapaFilme6);

    }

    //Comando para listar filmes em ordem de lançamento
    public void OrdemLancamento(JLabel TituloBusca, JLabel NomeFilme0, JLabel NomeFilme1, JLabel NomeFilme2, JLabel NomeFilme3, JLabel NomeFilme4, JLabel NomeFilme5, JLabel NomeFilme6, JLabel CapaFilme0, JLabel CapaFilme1, JLabel CapaFilme2, JLabel CapaFilme3, JLabel CapaFilme4, JLabel CapaFilme5, JLabel CapaFilme6) {

        // o que é isso???
        posicao = 0;
        // isto é pra voltar no começo da listagem, lembra que qdo clica nas setinhas
        //aumenta a posição? ai qdo clica na consulta, ele volta pra 0,
        // isto é necessário, pq senao a consulta dos outros filmes, ja vai começar pelo 1, 2, 3...

        TituloBusca.setIcon(new ImageIcon(getClass().getResource("/Imagens/label_lancamentos.jpg")));

         //antes de adicionar os filmes no acervo removemos todos filmes no acervo
        acervo.removeAllElements();
        Connection conn = null;
        String consulta = "SELECT filmes.nome_filme, filmes.id_categoria_filme, filmes.genero_filme, filmes.sinopse_filme, filmes.trailer_filme, filmes.data_lanc_filme, filmes.capa_filme, midia.id_midia, midia.id_filme FROM midia, filmes WHERE midia.disponivel = 1 AND filmes.id_filme = midia.id_filme GROUP BY midia.id_filme ORDER BY filmes.data_lanc_filme DESC";


        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, senha);
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(consulta);

            while (rs.next()) {
                int id_midia = rs.getInt("id_midia");
                int idcategoria = rs.getInt("id_categoria_filme");
                String nome = rs.getString("nome_filme");
                String generofilme = rs.getString("genero_filme");
                String sinopsefilme = rs.getString("sinopse_filme");
                String trailer = rs.getString("trailer_filme");
                Date datalanc = rs.getDate("data_lanc_filme");
                String capafilme = rs.getString("capa_filme");
                //formatando para o modelo declarado em "f" e é armazenado na string lancamento
                String lancamento = f.format(datalanc);
                //adiciona um novo filme no acervo
                acervo.add(new Filme(id_midia, idcategoria, nome, generofilme, sinopsefilme, trailer, lancamento, capafilme));
            }

        } catch (Exception e) {
            System.out.println("Dado Classe não encontrada");
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
            }
        }
        Listagem(false, acervo, NomeFilme0, NomeFilme1, NomeFilme2, NomeFilme3, NomeFilme4, NomeFilme5, NomeFilme6, CapaFilme0, CapaFilme1, CapaFilme2, CapaFilme3, CapaFilme4, CapaFilme5, CapaFilme6);

    }

    //Comando para verificar a direção do campo de listagem
    public void direcao(boolean vaiouvem, JLabel NomeFilme0, JLabel NomeFilme1, JLabel NomeFilme2, JLabel NomeFilme3, JLabel NomeFilme4, JLabel NomeFilme5, JLabel NomeFilme6, JLabel CapaFilme0, JLabel CapaFilme1, JLabel CapaFilme2, JLabel CapaFilme3, JLabel CapaFilme4, JLabel CapaFilme5, JLabel CapaFilme6) {
        Listagem(vaiouvem, acervo, NomeFilme0, NomeFilme1, NomeFilme2, NomeFilme3, NomeFilme4, NomeFilme5, NomeFilme6, CapaFilme0, CapaFilme1, CapaFilme2, CapaFilme3, CapaFilme4, CapaFilme5, CapaFilme6);

    }

    //Comando para listar filmes por gênero
    public void Genero(String genero, JLabel TituloBusca, JLabel NomeFilme0, JLabel NomeFilme1, JLabel NomeFilme2, JLabel NomeFilme3, JLabel NomeFilme4, JLabel NomeFilme5, JLabel NomeFilme6, JLabel CapaFilme0, JLabel CapaFilme1, JLabel CapaFilme2, JLabel CapaFilme3, JLabel CapaFilme4, JLabel CapaFilme5, JLabel CapaFilme6) {

        String generoide = "";
        if (genero.equalsIgnoreCase("Ação")) {
            generoide = "label_acao.jpg";
        } else if (genero.equalsIgnoreCase("Drama")) {
            generoide = "label_drama.jpg";
        } else if (genero.equalsIgnoreCase("Ficção")) {
            generoide = "label_ficcao.jpg";
        } else if (genero.equalsIgnoreCase("Terror")) {
            generoide = "label_terror.jpg";
        } else if (genero.equalsIgnoreCase("Comédia")) {
            generoide = "label_comedia.jpg";
        } else if (genero.equalsIgnoreCase("Romance")) {
            generoide = "label_romance.jpg";
        } else if (genero.equalsIgnoreCase("Policial")) {
            generoide = "label_policial.jpg";
        }


        TituloBusca.setIcon(new ImageIcon(getClass().getResource("/Imagens/" + generoide)));

        posicao = 0;

         //antes de adicionar os filmes no acervo removemos todos filmes no acervo
        acervo.removeAllElements();
        Connection conn = null;
        //String consulta = "SELECT * FROM filmes WHERE genero_filme = (SELECT id_genero FROM genero WHERE nome_genero LIKE '" + genero + "') ORDER BY nome_filme";
        String consulta = "SELECT filmes.nome_filme, filmes.id_categoria_filme, filmes.genero_filme, filmes.sinopse_filme, filmes.trailer_filme, filmes.data_lanc_filme, filmes.capa_filme, midia.id_midia, midia.id_filme FROM midia, filmes WHERE midia.disponivel = 1 AND filmes.id_filme = midia.id_filme AND  filmes.genero_filme = (SELECT id_genero FROM genero WHERE nome_genero LIKE '" + genero + "') GROUP BY filmes.id_filme ORDER BY filmes.data_lanc_filme DESC";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, senha);
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(consulta);

            while (rs.next()) {
                int id_midia = rs.getInt("id_midia");
                int idcategoria = rs.getInt("id_categoria_filme");
                String nome = rs.getString("nome_filme");
                String generofilme = rs.getString("genero_filme");
                String sinopsefilme = rs.getString("sinopse_filme");
                String trailer = rs.getString("trailer_filme");
                Date datalanc = rs.getDate("data_lanc_filme");
                String capafilme = rs.getString("capa_filme");
                //formatando para o modelo declarado em "f" e é armazenado na string lancamento
                String lancamento = f.format(datalanc);
                //adiciona um novo filme no acervo
                acervo.add(new Filme(id_midia, idcategoria, nome, generofilme, sinopsefilme, trailer, lancamento, capafilme));
            }

        } catch (Exception e) {
            System.out.println("Dado da Classe não encontrada");
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
            }
        }

        Listagem(false, acervo, NomeFilme0, NomeFilme1, NomeFilme2, NomeFilme3, NomeFilme4, NomeFilme5, NomeFilme6, CapaFilme0, CapaFilme1, CapaFilme2, CapaFilme3, CapaFilme4, CapaFilme5, CapaFilme6);

    }

    //Comando para listar filmes
    public void Listagem(boolean vaiouvem, Vector<Filme> acervo, JLabel NomeFilme0, JLabel NomeFilme1, JLabel NomeFilme2, JLabel NomeFilme3, JLabel NomeFilme4, JLabel NomeFilme5, JLabel NomeFilme6, JLabel CapaFilme0, JLabel CapaFilme1, JLabel CapaFilme2, JLabel CapaFilme3, JLabel CapaFilme4, JLabel CapaFilme5, JLabel CapaFilme6) {

        Vector<JLabel> lista = new Vector<JLabel>();
        lista.removeAllElements();
        lista.add(NomeFilme0);
        lista.add(NomeFilme1);
        lista.add(NomeFilme2);
        lista.add(NomeFilme3);
        lista.add(NomeFilme4);
        lista.add(NomeFilme5);
        lista.add(NomeFilme6);

        Vector<JLabel> capa = new Vector<JLabel>();
        capa.removeAllElements();
        capa.add(CapaFilme0);
        capa.add(CapaFilme1);
        capa.add(CapaFilme2);
        capa.add(CapaFilme3);
        capa.add(CapaFilme4);
        capa.add(CapaFilme5);
        capa.add(CapaFilme6);


        if (vaiouvem) {
            if ((posicao + lista.size()) < acervo.size()) {
                posicao++;
            }

        } else {
            if (posicao != 0) {
                posicao--;
            }
        }

        if ((posicao + lista.size()) <= acervo.size()) {

            for (byte cont_lista = 0; cont_lista < lista.size(); cont_lista++) {
                for (int cont = posicao; cont < acervo.size(); cont++) {
                    if (cont_lista == (cont - posicao)) {
                        lista.get(cont_lista).setText("<html><center>" + acervo.get(cont).getNomefilme() + "</center></html>");

                        capa.get(cont_lista).setIcon(new ImageIcon(getClass().getResource("/Imagens/Capas/" + acervo.get(cont).getCapafilme())));
                        //capa.get(cont_lista).setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagens/Capas/" + acervo.get(cont).getCapafilme())));
                        //capa.get(cont_lista).setIcon(new ImageIcon("/Imagens/Capas/"+acervo.get(cont).getCapafilme()));
                    }
                }
            }
        } else {
            /*como o if anterior era somente quando a lista fosse menor ou igual ao tamanho do acervo tive que acrescentar esta exceção.
             * antes de acrescentar qualquer informação decidi limpar os dois vetores.
             */
            for (int i = 0; i < lista.size(); i++) {
                lista.get(i).setText("");
                capa.get(i).setIcon(new ImageIcon());
            }
            for (byte cont_lista = 0; cont_lista < acervo.size(); cont_lista++) {
                for (int cont = posicao; cont < acervo.size(); cont++) {
                    if (cont_lista == (cont - posicao)) {

                        lista.get(cont_lista).setText("<html><center>" + acervo.get(cont).getNomefilme() + "</center></html>");

                        capa.get(cont_lista).setIcon(new ImageIcon(getClass().getResource("/Imagens/Capas/" + acervo.get(cont).getCapafilme())));
                    }
                }
            }
        }
    }

    //Comando para selecionar algum filme no campo de listagem
    public void SelecionaFilme(int indiceLabel, JLabel labelLocar, JLabel labelRetirar, JLabel CestaNomeFilme0, JLabel CestaNomeFilme1, JLabel CestaNomeFilme2, Vector<Filme> cesta) {

        indiceLabel = indiceLabel + posicao;

        //Filme filme = new Filme(acervo.get(indiceLabel).getIdfilme(), acervo.get(indiceLabel).getIdcategoriafilme(), acervo.get(indiceLabel).getNomefilme(), acervo.get(indiceLabel).getGenerofilme(), acervo.get(indiceLabel).getSinopse(), acervo.get(indiceLabel).getTrailerfilme(), acervo.get(indiceLabel).getLancamento(), acervo.get(indiceLabel).getCapafilme());


        //    new Tela3(filme).setVisible(true);

        new Tela3(acervo.get(indiceLabel), cesta, labelLocar, labelRetirar, CestaNomeFilme0, CestaNomeFilme1, CestaNomeFilme2).setVisible(true);




    }

    //Comando para alugar algum filme selecionado
    public void Alugar(Vector<Filme> cesta) {
        new Tela4(cesta).setVisible(true);
    }

    public void retirarFilmeCesta(Vector<Filme>cesta){
        new Tela7(cesta).setVisible(true);

    }

    //Comando quando cria a Tela2 para verificar se há algum filme na cesta
    public void verificaCesta(Vector<Filme> cesta, JLabel L_Alugar, JLabel L_Retirar, JLabel CestaNomeFilme0, JLabel CestaNomeFilme1, JLabel CestaNomeFilme2) {

        if (cesta.size() != 0) {
            L_Alugar.setIcon(new ImageIcon(getClass().getResource("/Imagens/label_alugar.jpg")));
            L_Retirar.setIcon(new ImageIcon(getClass().getResource("/Imagens/label_retirar.jpg")));
            if (cesta.size() == 1) {
                CestaNomeFilme0.setText(cesta.get(0).getNomefilme());
            }
            if (cesta.size() == 2) {
                CestaNomeFilme0.setText(cesta.get(0).getNomefilme());
                CestaNomeFilme1.setText(cesta.get(1).getNomefilme());
            }
            if (cesta.size() == 3) {
                CestaNomeFilme0.setText(cesta.get(0).getNomefilme());
                CestaNomeFilme1.setText(cesta.get(1).getNomefilme());
                CestaNomeFilme2.setText(cesta.get(2).getNomefilme());
            }

        }
    }
}
